home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / sbin / pcinitrd < prev    next >
Text File  |  2005-10-18  |  5KB  |  228 lines

  1. #!/bin/sh
  2. #
  3. # Utility for constructing PCMCIA initrd boot images
  4. #
  5. # Copyright (C) 1999 David A. Hinds -- dahinds@users.sourceforge.net
  6. #
  7. # pcinitrd 1.24 2003/09/11 15:58:30
  8. #
  9. RELEASE=""
  10. ALL=""
  11. SIZE=2400
  12. MODULES="pcmcia/pcmcia_core.o pcmcia/ds.o"
  13.  
  14. # Things to install when "all" is selected
  15. SOCK="i82365.o tcic.o"
  16. BLK="ide-cs.o aha152x_cs.o fdomain_cs.o qlogic_cs.o"
  17. MEM="ftl_cs.o memory_cs.o sram_mtd.o iflash2_mtd.o iflash2+_mtd.o"
  18.  
  19. usage()
  20. {
  21.     echo "usage: $0 [-v] [-a|-all] [-u|--update] [-r|--kernel=kernel-release]" >&2
  22.     echo "       [-s|--size=image-size] [-d|--dir=root-dir] <initrd-image> [modules ...]" >&2
  23.     exit 1
  24. }
  25.  
  26. while [ $# -gt 0 ] ; do
  27.     case $1 in
  28.     -a|--all)
  29.     ALL=y
  30.     ;;
  31.     -d)
  32.     ROOT=$2 ; shift
  33.     ;;
  34.     --dir=*)
  35.     ROOT=`echo $1 | sed -e 's/^--dir=//'`
  36.     ;;
  37.     -r)
  38.     KERNEL=$2 ; shift
  39.     ;;
  40.     --release=*)
  41.     KERNEL=`echo $1 | sed -e 's/^--kernel=//'`
  42.     ;;
  43.     -s)
  44.     SIZE=$2 ; shift
  45.     ;;
  46.     --size=*)
  47.     SIZE=`echo $1 | sed -e 's/^--size=//'`
  48.     ;;
  49.     -u|--update)
  50.     UPDATE=y
  51.     ;;
  52.     -v|--verbose)
  53.     VERBOSE=--verbose
  54.     ;;
  55.     -*)
  56.     usage
  57.     exit 1
  58.     ;;
  59.     *)
  60.     break
  61.     ;;
  62.     esac
  63.     shift
  64. done
  65.  
  66. if [ "$KERNEL" = "" ] ; then
  67.     KERNEL=`uname -r`
  68. fi
  69. [ "$VERBOSE" ] && echo "Using version $KERNEL modules"
  70. MODDIR=$ROOT/lib/modules/$KERNEL
  71.  
  72. if [ $# -lt 1 ] ; then usage ; fi
  73. TARGET=$1 ; shift
  74. if [ "$ALL" = "y" ] ; then
  75.     for MOD in $SOCK $BLK $MEM ; do
  76.     if [ -f $MODDIR/pcmcia/$MOD ] ; then
  77.         MODULES="$MODULES pcmcia/$MOD"
  78.     fi
  79.     done
  80. fi
  81.  
  82. BIN="bin/mount bin/umount sbin/insmod sbin/cardmgr"
  83. LIB=`ls $ROOT/lib/libc.so.? | sort | tail -1`
  84. ETC="/etc/ld.so.cache /etc/pcmcia/config /etc/pcmcia/config.opts"
  85. DEV="/dev/console /dev/null /dev/ram /dev/tty1 /dev/tty2 /dev/tty3 /dev/tty4"
  86. LF=`file -bL $LIB`
  87. for F in $* ; do
  88.     if [ -f $MODDIR/$F ] ; then
  89.     MODULES="$MODULES $F"
  90.     elif [ -x $ROOT/$F ] ; then
  91.     FT=`file -bL $ROOT/$F`
  92.     if [ "$FT" = "$LF" ] ; then
  93.         LIB="$LIB $F"
  94.     else
  95.         BIN="$BIN $F"
  96.     fi
  97.     elif [ -b $ROOT/$F -o -c $ROOT/$F ] ; then
  98.     DEV="$DEV $F"
  99.     elif [ -f $ROOT/$F ] ; then
  100.     ETC="$ETC $F"
  101.     else
  102.     echo "$F not found." 1>&2
  103.     exit 1
  104.     fi
  105. done
  106.  
  107. fail()
  108. {
  109.     umount $VERBOSE $MNT
  110.     rmdir $MNT
  111.     exit 1
  112. }
  113. trap fail SIGTERM SIGINT
  114.  
  115. strip_cp()
  116. {
  117.     if [ -d $3 ] ; then
  118.     DEST=$3/`basename $2`
  119.     else
  120.     DEST=$3
  121.     fi
  122.     strip $1 $VERBOSE -o $DEST $2 | sed -e 's/([^ ]*)//g' || fail
  123. }
  124.  
  125. MNT=$ROOT/tmp/initrd.mnt-$$
  126. mkdir $VERBOSE $MNT || exit 1
  127.  
  128. if [ "$UPDATE" = "y" ] ; then
  129.     if [ -b $TARGET ] ; then
  130.     mount $VERBOSE -t ext2 $TARGET $MNT || fail
  131.     else
  132.     mount $VERBOSE -t ext2 -o loop $TARGET $MNT || fail
  133.     fi
  134.     strip_cp --strip-all $ROOT/sbin/cardmgr $MNT/sbin || fail
  135.     CD=`pwd` ; cd $MNT
  136.     for DIR in block misc fs net pcmcia ; do
  137.     for MOD in $DIR/*.o ; do
  138.         strip_cp --discard-all $ROOT/lib/modules/$MOD $DIR || fail
  139.     done
  140.     done
  141.     cd $CD
  142.     umount $VERBOSE $MNT
  143.     rmdir $MNT
  144.     exit 0
  145. fi
  146.  
  147. [ "$VERBOSE" ] && echo "Creating filesystem on $TARGET"
  148. if [ -b $TARGET ] ; then
  149.     mke2fs $TARGET $SIZE > /dev/null || fail
  150.     mount $VERBOSE -t ext2 $TARGET $MNT || fail
  151. else
  152.     dd if=$ROOT/dev/zero of=$TARGET bs=1k count=$SIZE
  153.     echo "y" | mke2fs $TARGET $SIZE >/dev/null || fail
  154.     mount $VERBOSE -t ext2 -o loop $TARGET $MNT || fail
  155. fi
  156.  
  157. rm -rf $MNT/lost+found
  158. for DIR in bin dev etc lib proc tmp mnt ; do
  159.     mkdir $VERBOSE $MNT/$DIR || fail
  160. done
  161. for DIR in block misc fs net pcmcia ; do
  162.     mkdir $VERBOSE $MNT/lib/$DIR || fail
  163. done
  164.  
  165. for F in $DEV ; do
  166.     cp -a $VERBOSE $ROOT/$F $MNT/dev || fail
  167. done
  168. if [ -e $ROOT/dev/systty ] ; then
  169.     cp -a $VERBOSE $ROOT/dev/systty $MNT/dev || fail
  170. fi
  171.  
  172. for F in $BIN ; do
  173.     strip_cp --strip-all $ROOT/$F $MNT/bin
  174. done
  175. strip_cp --strip-all $ROOT/bin/ash $MNT/bin/sh
  176.  
  177. for F in $LIB ; do
  178.     strip_cp --strip-debug $ROOT/$F $MNT/lib
  179. done
  180. cp $VERBOSE $ROOT/lib/ld-linux.so.? $MNT/lib || fail
  181.  
  182. for F in $ETC ; do
  183.     cp $VERBOSE $ROOT/$F $MNT/etc || fail
  184. done
  185. for F in scsi network ftl ide memory serial ; do
  186.     touch $MNT/etc/$F ; chmod +x $MNT/etc/$F
  187. done
  188.  
  189. for MOD in $MODULES ; do
  190.     strip_cp --strip-debug $MODDIR/$MOD $MNT/lib/$MOD
  191. done
  192.  
  193. [ "$VERBOSE" ] && echo "Creating linuxrc startup script"
  194. cat > $MNT/linuxrc <<- 'EOF'
  195.     #!/bin/sh
  196.     
  197.     # Should be either i82365 or tcic
  198.     PCIC=i82365
  199.     # Put socket driver timing parameters here
  200.     PCIC_OPTS=
  201.     # Put pcmcia_core options here
  202.     CORE_OPTS=
  203.     
  204.     mount -t proc /proc /proc
  205.  
  206.     echo ""
  207.     echo "==== initrd: starting PCMCIA services ===="
  208.     echo ""
  209.     PC=/lib/pcmcia
  210.     insmod $PC/pcmcia_core.o $CORE_OPTS
  211.     insmod $PC/$PCIC.o $PCIC_OPTS
  212.     insmod $PC/ds.o
  213.     if [ "$DEBUG" != "" ] ; then V=-v ; fi
  214.     cardmgr $V -q -o -c /etc -m /lib -s /tmp/stab -p /tmp/pid
  215.     umount /proc
  216.     echo ""
  217.     
  218.     if [ "$DEBUG" != "" ] ; then
  219.         /bin/sh < /dev/console
  220.     fi
  221. EOF
  222. chmod +x $MNT/linuxrc 
  223.  
  224. df -P $MNT | awk '/tmp/ { printf "%dK/%dK used\n",$3,$2 }'
  225. umount $VERBOSE $MNT
  226. rmdir $MNT
  227. exit 0
  228.